home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
jx270t
/
vjx270.s
< prev
next >
Wrap
Text File
|
1999-06-11
|
12KB
|
672 lines
.include TNB.MAC
.include IOCSCALL.MAC
.include DOSCALL.MAC
.include target.mac
VER equ '0.40'
HEAD1 = 'STRD'
HEAD2 = VER
*--------------------------------
BUFSIZE equ 256
TCALL macro ent
move.w #ent,d1
jsr (a5)
endm
StartStatio:*******************常駐部
SS:
.dc.l -1
.dc.w $8000.w
.dc.l STRR
.dc.l ETYP
dhead: .dc.l HEAD1,HEAD2
STRA5: .dc.l $0.l
STRR: move.l a5,STRA5
rts
ETYP:
movem.l d0/a5,-(a7)
movea.l STRA5(pc),a5
bsr ETYPSUB
move.b d0,$3(a5)
lsr.w #8,d0
move.b d0,$4(a5)
movem.l (a7)+,d0/a5
rts
ETYPSUB:
tst.b $2(a5)
beq ETYP_KEEP
move.w #$5003,d0 *err
rts
*********************************************
head:
.dc.l HEAD1
.dc.l HEAD2
.even
*********************************************
*
* Target 用ルーチン
*
*********************************************
ScsiVect:
.dc.l 0
scsi_vect_table:
.ds.l 32
.even
*************
* Sub
**************
_checkmin:
cmp.b 4(a1),d3
bcs _mind3
move.b 4(a1),d3
_mind3:
rts
blocktoadr:
lea _base_add(pc),a1
movea.l (a1),a1
add.l d0,a1
rts
_get_adr:
moveq #9,d2
moveq #0,d0
move.l (a1),d0
andi.l #$001FFFFF,d0
lsl.l d2,d0 * x512
moveq #0,d3
move.b 4(a1),d3 * blocks
lsl.l d2,d3 * x512
rts
_e_getadr:
moveq #9,d2
move.l 2(a1),d0
lsl.l d2,d0 * x512
moveq #0,d3
move.b 7(a1),d3 * blocks
lsl.w #8,d3
move.b 8(a1),d3 * blocks
lsl.l d2,d3 * x512
rts
*************************************
* SEND
*************************************
T_SEND:
T_READ:
movea.l ScsiVect(pc),a5
tst.b 5(a1)
bne ERRCALL * コントロールバイトがある
move.b 7(a1),d3 * blocks
lsl.w #8,d3
move.b 8(a1),d3 * blocks
lea _base_add(pc),a1
tst.w SWC_D
bne 1f
*--- DMA
TCALL _TS_DATAIN
T_ALL:
tst.l d0
bne ERRRETRY * BUSY にしておこう
moveq #0,d2
TCALL _TS_STMSE * ステイタス & メッセージ & バスフリー
rts
1: *--- MPU
TCALL _TS_DATAIN_P
bra T_ALL
*************************************
* SETWINDOW
*************************************
T_SET_W:
movea.l ScsiVect(pc),a5
tst.b 5(a1)
bne ERRCALL * コントロールバイトがある
move.b 7(a1),d3 * blocks
lsl.w #8,d3
move.b 8(a1),d3 * blocks
lea _base_add(pc),a1
tst.w SWC_D
bne 1f
*--- DMA
TCALL _TS_DATAOUT
bra T_ALL
1: *--- MPU
TCALL _TS_DATAOUT_P
bra T_ALL
*************************************
* 0
*************************************
T_RELEASE:
T_RESERVE:
T_TESTUNIT:
T_SCAN:
T_SEND_D:
movea.l ScsiVect(pc),a5
tst.b 5(a1)
bne ERRCALL * コントロールバイトがある
moveq #$00,d2 *
TCALL _TS_STMSE * ステイタス & メッセージ & バスフリー
rts
*************************************
* INQUIRY
*************************************
T_INQUIRY:
movea.l ScsiVect(pc),a5
tst.b 5(a1)
bne ERRCALL * コントロールバイトがある
moveq.l #96,d3
bsr _checkmin * 返すバイト数を調整
lea.l INQU_DAT(pc),a1 * 返すデータ
TCALL _TS_DATAIN_P * データを送る
tst.l d0
bne ERRRETRY * BUSY にしておこう
moveq #$00,d2 *
TCALL _TS_STMSE * ステイタス & メッセージ & バスフリー
rts
*********** INQUIRY データ
INQU_DAT:
.dc.b $06,$80,$02,$42,$5B,$00,$00,$00,$53,$48,$41,$52,$50,$20,$20,$20 * ...B[...SHARP
.dc.b $4A,$58,$32,$37,$30,$20,$53,$43,$53,$49,$20,$20,$20,$20,$20,$20 * JX270 SCSI
.dc.b $42,$31,$32,$54,$20,$04,$08,$E7,$03,$20,$03,$20,$03,$20,$03,$20 * B12T .... . . .
.dc.b $00,$00,$D9,$14,$FA,$00,$04,$04,$02,$08,$08,$08,$C0,$D0,$80,$05 * ..ル.........タミ..
.dc.b $01,$01,$02,$03,$04,$05,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * ................
.dc.b $00,$09,$F6,$0D,$B3,$00,$00,$00,$00,$01,$90,$03,$00,$00,$00,$00 * ....ウ...........
.dc.b $00,$00,$00,$00,$00,$00,$00,$3E,$00,$00,$00,$00,$00,$00,$00,$00 * .......>........
.dc.b $00,$0A,$00,$00,$00,$0A,$00,$00,$27,$F0,$00,$00,$36,$F0,$00,$00 * ........'...6...
.dc.b $00,$05,$08,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * ................
.dc.b $FF,$09,$00,$00,$00,$00,$E8,$01,$E0,$78,$00,$00,$00,$00,$00,$00 * .........x......
.dc.b $00,$40,$00,$00,$00,$00
.even
****************************************
* DATA I/O でエラーなど、
* リトライして欲しい場合
****************************************
ERRRETRY:
moveq #8,d2 *
TCALL _TS_STSIN1 * ステイタス 8 (BUSY)
moveq #0,d2 *
TCALL _TS_MSGIN1 * メッセージ 0
TCALL _TS_RELEASE * とにかく バスフリーにして終わり
move.l #$0006_00_00,d2 * d2 = KEY*0x10000 + ASC*0x100 + ASCQ
TCALL _TS_SETSENSEKEY
rts
ERRCALL:
moveq #2,d2 *
TCALL _TS_STSIN1 * ステイタス 2 (Cond.CHK)
moveq #0,d2 *
TCALL _TS_MSGIN1 * メッセージ 0
TCALL _TS_RELEASE * とにかく バスフリーにして終わり
move.l #$0005_24_00,d2 * d2 = KEY*0x10000 + ASC*0x100 + ASCQ
TCALL _TS_SETSENSEKEY
rts
__COM__:
ID:
.dc.l $0000_0007
SWC_D: .dc.w 0 * 1;MPU 転送
SWC_P: .dc.w 0 * 1;PCM 疑似アクセス音
HIM: .dc.w 0 * 1;HIMEM DISK
BLKNM: .dc.l 1 * 確保 MEMサイズ
StaMod: .dc.b 0
.even
_base_add:
.ds.b 4096
__COM__S:
_base_address:
EndStatio:*******************常駐部
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$F0000000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$F0000000,a0
bcc IC1
cmp.l #HEAD1,$0100+(head-SS)(a0)
bne @f
cmp.l #HEAD2,$0104+(head-SS)(a0)
bne @f
adda.l #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
DevChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l #$6800,a0
DC1: cmp.l #'NUL ',(a0)
bne @f
cmp.l #' ',4(a0)
bne @f
bra DC4
@@:
addq.l #2,a0
bra DC1 *絶対あるはず。。
DC4:
move.l d0,-(sp)
suba.l #(dhead-SS),a0 *リンクポインタ
DC2: movea.l (a0),a0
move.l a0,d0
bmi DC3
cmp.l #HEAD1,(dhead-SS)(a0)
bne DC2
cmp.l #HEAD2,(dhead-SS)+4(a0)
bne DC2
cmp.l #HEAD1,(head-SS)(a0)
bne DC2
cmp.l #HEAD2,(head-SS)+4(a0)
bne DC2
*あった
move.l (sp)+,d0
rts
DC3:
move.l (sp)+,d0
sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
move.b (a2),d2
cmpi.b #'$',d2
jbeq AtoHI
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AIr
cmpi.b #9,d2
jbhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
jbra @b
AIr: subq #1,a2
rts
AtoHI:
*(Hex専用)
move.b (a2)+,d2 *$ skip
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AHIL1
cmpi.b #9,d2
jbhi AHIL1
lsl.l #4,d0
add.l d2,d0
jbra @b
AHIL1:
ori.b #$20,d2
subi.b #'a'-'0',d2
jbcs AHIL2
cmpi.b #5,d2
jbhi AHIL2
lsl.l #4,d0
addi.l #10,d0
add.l d2,d0
jbra @b
AHIL2: subq #1,a2
rts
clcf: .dc.w 0
cmdlinchk:*------------------------------------------------------------------
* in a2 = 文字列
* out d0.b 0 ; OK
* -1 ; LINEERR
* -2 ; COMDERR
* -100; その他
* 'h' ; -?
* 'h' ; -H
* 'r' ; -R
*
clr.w clcf
bra sw
cmdlinchkD: ** DEVICE エントリ用
move.w #-1,clcf
sw: move.b (a2)+,d0
bne 1f
*======終わり?
tst.w clcf
bne @f
*======COMLINE からなので終わり
moveq #0,d0
rts
@@: *====== DEVICE
move.b (a2),d0
bne sw
moveq #0,d0 * 0が連続なので終わり
rts
1:
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe: *======コマンドラインが異常
moveq #-1,d0
rts
swc:
*======スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
bne @f
moveq #'h',d0
rts
@@:
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
beq clcrts
@@:
moveq #-2,d0
clcrts:
rts
ETYP_KEEP:*----------------------------------------
**常駐!
movem.l d1-d7/a0-a6,-(sp)
suba.l a3,a3
Print CRLF(pc)
Print LR1(pc)
movea.l 18(a5),a2
@@: move.b (a2)+,d0 **ファイル名スキップ
bne @b
bsr cmdlinchkD *a2 に文字列もって bsr
tst.b d0
bne @f
bsr keepdisp
tst.l d0
bne EK_ERR
Print LR2(pc)
move.b #-1,StaMod
move.l #EndStatio,d0
move.l d0,$e(a5)
movem.l (sp)+,d1-d7/a0-a6
moveq #$0,d0
rts
@@:
cmpi.b #-100,d0
beq EK_ERR
cmpi.b #-1,d0
bne @f
Print LR6(pc)
bra EK_ERR
@@:
Print LR7(pc)
EK_ERR:
movem.l (sp)+,d1-d7/a0-a6
move.w #$700d,d0
rts
init:*------------------------------------------------------------------
Print LR1(pc)
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
move.l a0,d0
bne @f
bsr DevChk
@@: movea.l a0,a3 *常駐先頭アドレス
*d1に常駐状態
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
lea __COM__-SS(a3),a0
lea __COM__,a6
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a0)+,(a6)+
dbra d0,@b
conl:
tst.b (a2)+ *スキップ
bsr cmdlinchk *a2 に文字列もって bsr
tst.b d0
bne 1f
bra keep
1:
cmpi.b #-100,d0
bne @f
DOS _EXIT
@@:
cmpi.b #-1,d0
bne @f
pea LR6(pc)
bra PE *end
@@:
cmpi.b #'r',d0
beq free
cmpi.b #'h',d0
beq help
pea LR7(pc) * -2 もここだ!
bra PE *end
help:
pea LRH(pc)
bra PE *end
keep: ************************** 常駐させる
move.l a3,d0
beq keepL1
*既に常駐、設定変更
* lea __COM__-SS(a3),a0
* lea __COM__,a6
* move.l #(__COM__S-__COM__)/2-1,d0
*@@: move.w (a6)+,(a0)+
* dbra d0,@b
* move.w MC(pc),d0
* bne @f
pea LR5(pc)
bra PE *end
*@@: pea LR5_(pc)
* bra PE *end
keepL1:
**セット
bsr keepdisp
tst.l d0
beq @f
DOS _EXIT
@@:
Print LR2(pc)
Print LRKP(pc)
clr.w -(sp)
move.l #EndStatio-StartStatio,d0
move.l d0,-(sp)
DOS _KEEPPR
keepdisp:***************
*===== SCSI-TAI 登録
TSCSI _TARGETCHECK
cmpi.l #-3,d0
bne keepdisp_L1
movem.l d0/d7/a0-a2,-(sp)
TSCSI _TS_WORKADR
move.l d0,a1
move.l 28(a1),d0
move.l d0,ScsiVect
lea scsi_command_table(pc),a0
lea scsi_vect_table(pc),a2
moveq.l #9-1,d7
@@:
move.l (a0)+,d2
move.l (a0)+,a1
TSCSI _TS_CMDSET
move.l d0,(a2)+
dbra d7,@b
movem.l (sp)+,d0/d7/a0-a2
keepdisp_L1:
*--- 自分の ID を記憶
move.b $ed0070,d0
andi.l #$0007,d0
move.l d0,ID
moveq #0,d0
rts
free: *****************************常駐解除
move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@:
tst.b StaMod
beq @f
pea LRCN(pc) **CONFIG常駐
bra PE *end
@@:
TSCSI $1F
cmpi.l #-1,d0
beq free_L1
lea scsi_command_table(pc),a0
lea (scsi_vect_table-SS)(a3),a2
moveq.l #9-1,d7
@@:
move.l (a0)+,d2
addq.l #4,a0
move.l (a2)+,a1
TSCSI _TS_CMDSET
dbra d7,@b
moveq #0,d2
move.l (a2)+,a1
TSCSI _TS_SETPAGE
free_L1:
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq.l #4,sp
pea LR3(pc)
PE: DOS _PRINT
addq.l #4,sp
DOS _EXIT
*------------------------------------------*
scsi_command_table:
.dc.l $12,T_INQUIRY
.dc.l $28,T_READ
.dc.l $17,T_RELEASE
.dc.l $16,T_RESERVE
.dc.l $1b,T_SCAN
.dc.l $1d,T_SEND_D
.dc.l $24,T_SET_W
.dc.l $00,T_TESTUNIT
.dc.l $2a,T_SEND
*.dc.l $03,T_REQUEST
*------------------------------------------*
MC: .dc.w 0 *モードをいじった
LR2: .dc.b ' SCSI-VIRTUAL JX270 が使えます。',$0d,$0a,0
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
LR3: .dc.b ' 常駐解除しました。',$0d,$0a,0
LR4: .dc.b ' ベクタが占領されています。',$0d,$0a,0
LR5: .dc.b ' 既に常駐しています。',$0d,$0a,0
LR5_: .dc.b ' 設定を変更しました。 ',$0d,$0a,0
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
LRCN: .dc.b ' CONFIG.SYSで登録されています。',$0d,$0a
.dc.b ' 常駐解除できません。',$0d,$0a,0
.even
LRH: .dc.b $0d,$0a
.dc.b '使用法:VJX270.x [switch] ',$0d,$0a
.dc.b ' /D ・・・・・・・・ IOCS エミュ時、DMAC を使用しません。',$0d,$0a
*.dc.b ' /A ・・・・・・・・ アクセス時 TIMER-LED を点灯させます。',$0d,$0a
.dc.b ' /R ・・・・・・・・ 常駐解除します。',$0d,$0a
.dc.b $0d,$0a
.dc.b 0
.even
LR1: .dc.b 'X68k <SCSI-TARGET> SCSI-VIRTUAL JX270 Version '
.dc.l VER
.dc.b ' Copyright 1999 TNB製作所'
CRLF: .dc.b $0d,$0a,0
.even
.bss
.end init